#include "rb_tree.h"


namespace mian_yang
{
    template<class K>
    class set
    {
        struct KeyOfT
        {
            K operator()(const K &key)
            {
                return key;
            }
        };

    public:
        typedef RBTree<K, K, KeyOfT> rb_tree;
        typedef typename RBTree<K, K, KeyOfT>::const_Iterator Iterator;
        typedef typename RBTree<K, K, KeyOfT>::const_Iterator const_Iterator;

        bool insert(const K &key) /*这里要加const， 为什么， 因为c++的类型检查很严格， 非const 引用不能引用常量*/
        {
            return rb.Insert(key);
        }

        void InOrder()
        {
            rb.InOrder();
        }

        Iterator begin()
        {
            return rb.Begin();
        }

        Iterator end()
        {
            return rb.End();
        }

        const_Iterator begin() const
        {
            return rb.Begin();
        }

        const_Iterator end() const
        {
            return rb.End();
        }
    private:
        rb_tree rb;

    public:
        static void Test()
        {
            mian_yang::set<int> st;
            st.insert(1);
            st.insert(16);
            st.insert(18);
            st.insert(13);
            st.insert(166);
            st.insert(19);
            st.insert(151);

            st.InOrder();
            cout << endl;

            set<int>::Iterator it = st.begin();
            while (it != st.end())
            {
                cout << *it << endl;
                ++it;
            }


        }
    
    };
}